package com.mhkj.revise.plan.service;

import java.util.Date;
import java.util.List;

import com.mhkj.revise.plan.entity.PlanNode;
import com.mics.core.common.componet.Pagination;
import com.mics.core.system.base.service.BaseService;

/**
 * 计划节点名称
 * 
 * @author mics
 * @date 2018年7月6日
 * @version 1.0
 */
public interface PlanNodeService extends BaseService<PlanNode> {
	/**
	 * 获取关键节点
	 * 
	 * @param empId
	 *            执行人id
	 * @param year
	 *            年份
	 * @param taskType
	 *            关键节点
	 * @return
	 */
	List<PlanNode> findKeyNodebyEmpId(String empId, String year, String taskType);

	/**
	 * 根据编号查询计划节点
	 * 
	 * @author mics
	 * @date 2018年7月9日
	 * @version 1.0
	 * @param NO
	 *            编号
	 */
	public PlanNode getPlanNodeByNO(String NO);

	/**
	 * 计划节点
	 * 
	 * @author mics
	 * @date 2018年7月11日
	 * @version 1.0
	 */
	Pagination<PlanNode> listByPage(PlanNode planNode, int pageIndex,
			int pageSize);
	
	

	/**
	 * 查询关联到业务系统的计划
	 * 
	 * @author mics
	 * @date 2018年7月12日
	 * @version 1.0
	 */
	List<PlanNode> queryBusiSysPlan();

	/**
	 * 我关注的计划
	 * @param listl 
	 * @param tab
	 * @param itemId
	 * @param planNode
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	
	Pagination<PlanNode> findCarePlanPage(  List<Long> listl, Long itemId, Integer state, Date month, int pageIndex, int pageSize);
	/**
	 * 获取我的直属下属计划
	 * @param list 直属下属id 集合
	 * @param itemName
	 * @param state
	 * @param month
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	Pagination<PlanNode> listMySubordinatePage(List<String> list,  Long itemId, Integer state, Date month, int pageIndex,
			int pageSize);

	/**
	 * 计划统计
	 * 
	 * @author wk
	 * @date 2018年7月24日
	 * @version 1.0
	 */
	List<Object> countList();
	
	/**
	 * 获取当前节点的所有子节点
	 * wt
	 */
	List<PlanNode> findChildList(Long id);
 
	/**
	 * 获取所有符合条件的任务总数
	 * @param planId
	 * @param month
	 * @param year
	 * @param functionOffice 
	 * @return 
	 */
	List<PlanNode> getAllTask(Long planId, Long month, Long year,Long planTypeId,String code, Long functionOffice);
	/**
	 * 获取所有符合条件应当完成的任务总数
	 * @param planId
	 * @param month
	 * @param year
	 * @param functionOffice 
	 * @return 
	 */
	List<PlanNode> getShouldCompletedTask(Long planId, Long month, Long year,Long planTypeId,String code, Long functionOffice);
	/**
	 * 获取所有符合条件按时完成的任务总数
	 * @param planId
	 * @param month
	 * @param year
	 * @param functionOffice 
	 * @return 
	 */
	List<PlanNode> getCompletedOnTimeTask(Long planId, Long month, Long year,Long planTypeId,String code, Long functionOffice);
/**
 * 获取符合条件的所有逾期任务
 * @param planId
 * @param month
 * @param year
 * @param functionOffice 
 * @return
 */
	List<PlanNode> getOverdue(Long planId, Long month, Long year,Long planTypeId,String code, Long functionOffice);
/**
 * 获取符合条件的已完成任务
 * @param planId
 * @param month
 * @param year
 * @param functionOffice 
 * @return
 */
List<PlanNode> getCompletedTask(Long planId, Long month, Long year,Long planTypeId,String code, Long functionOffice);
/**
 * 查询督导列表
 * @param year
 * @param nodeName 
 * @param code
 * @param itemId
 * @param month
 * @param pageIndex
 * @param pageSize
 * @return
 */
Pagination<PlanNode> findSupervise(Long year, Long planTypeId,String code, String nodeName, Long itemId, Long month, int pageIndex, int pageSize);

}
